<?php
/**
 * Created by PhpStorm.
 * User: lh
 * Date: 2020/1/20
 * Time: 11:55
 */

namespace App\Services\Com;

class EnvSmsService
{
    /**
     * ---------------------------------------
    参数名	类型	必填	说明
    userName	String	是	帐号用户名
    messageList	[Array]	是	数组形式，包含多个JSON对象，对象参数见下表。
    每个JSON对象包含短信内容和号码数据，最大1000个号码。
    timestamp	Long	是	当前时间戳，精确到毫秒。
    例如2020年8月1日12:00:00 时间戳为：1596254400000
    sign	String	是	由以下参数值组合成字符串并计算MD5值，参考详细规则
    计算：MD5(userName + timestamp + MD5(password))
    sendTime	String	否	短信定时发送时间，格式：yyyy-MM-dd HH:mm:ss。
    定时时间限制15天以内。
    messageList由多个JSON对象构成的JSON数组，具体参数列表：
    参数名	类型	必填	说明
    phone	String	是	发送手机号码
    content	String	是	短信内容
    extcode	String	否	可选，附带通道扩展码
    callData	String	否	用户回传数据，最大长度64。
    用户若传递此参数将在回执推送时回传给用户。
     * ---------------------------------------
     */

    public static function send($messageList) {
        if (empty($messageList) || !is_array($messageList)) {
            return false;
        }

        $data = [
            'userName'  => 'luobo888',  // 用户账号，驼峰法命名
            'timestamp' => UtilService::msectime(), // 时间戳，驼峰法命名
            'messageList' => $messageList, // 消息列表，驼峰法命名
            // 注意：密码的MD5值在这里不直接使用，而是和用户名、时间戳一起用于生成签名
        ];

        // 生成签名，这里假设密码是固定的 'zHng2J'
        $password = 'zHng2J';
        $data['sign'] = md5($data['userName'] . $data['timestamp'] . md5($password)); // MD5(userName + timestamp + MD5(password))

        // API的URL
        $url = 'http://39.108.185.8:8001/sms/api/sendMessageOne';

        // 初始化cURL
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_POST, true);

        // 设置请求头为JSON
        $headers = [
            'Content-Type: application/json',
            'Content-Type: application/json;charset=utf-8',
            // 可能还需要其他头部信息，比如设置字符编码为UTF-8（但通常POSTFIELDS的json编码会自动处理）
        ];
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);

        // 注意：由于我们发送的是JSON数据，所以不能直接使用http_build_query
        // 我们需要将数组转换为JSON字符串
        $jsonData = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); // 确保UTF-8编码和JSON字符串中的特殊字符不被转义
        curl_setopt($curl, CURLOPT_POSTFIELDS, $jsonData);

        $output = curl_exec($curl);
        curl_close($curl);

        // 检查输出并处理
        if ($output) {
            $output = json_decode($output, true);
            if ($output['code'] == 0) {
                return true;
            }
        }

        return false;
    }
}